home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 2
/
Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso
/
Aminet
/
misc
/
amag
/
AM1293_2.lha
/
Tips & Tricks
/
AutoRemove.pas
next >
Wrap
Pascal/Delphi Source File
|
1993-06-02
|
6KB
|
176 lines
{***************************************************}
{ AutoRemoveDemo.PAS }
{ }
{ Dieses Programm demonstiert in HighSpeed-Pascal }
{ die Nutzung von Message-Ports. }
{ Zunächst überprüft es, ob das Programm schon }
{ läuft. Wenn nicht, öffnet es ein Fenster und }
{ wartet auf eine Nachricht. Ansonsten schickt es }
{ eine Mitteilung an das schon gestartete Programm, }
{ woraufhin beide Programme terminieren }
{***************************************************}
PROGRAM AutoRemoveDemo;
uses
Exec, Intuition, Graphics; { Amiga-Strukturen }
VAR
MyWindow : tNewWindow; { NewWindow-Struktur }
Window : pWindow; { Zeiger aufs Fenster }
NewPort : tMsgPort; { Erster MessagePort }
ReplyPort : tMsgPort; { Zweiter MessagePort }
OldPort : pMsgPort; { Schon existierenden Port }
MsgSend : tMessage; { Message zum Senden }
MsgReceive: pMessage; { Empfangene Message }
Dummy : pMessage;
PortName : string;
PortCName : ARRAY [1..40] OF BYTE;
NodeName : string;
NodeCName : ARRAY [1..40] OF BYTE;
{****************************************************}
{ OpenIntuitionLib(version); }
{ Öffnet die Intuition-Library }
{ Liefert TRUE oder FALSE. }
{****************************************************}
FUNCTION OpenIntuitionLib(version:INTEGER):BOOLEAN;
BEGIN
IntuitionBase:=pIntuitionBase(OpenLibrary
('intuition.library',version));
IF IntuitionBase=NIL THEN
OpenIntuitionLib:=FALSE
ELSE
OpenIntuitionLib:=TRUE;
END;
{****************************************************}
{ OpenNewWindow(....); }
{ Öffnet ein Fenster und liefert den Zeiger aufs }
{ Fenster }
{****************************************************}
FUNCTION OpenNewWindow(
WLeftEdge,WTopEdge,WWidth,WHeight: INTEGER;
WDetailPen,WBlockPen: shortint;
WIDCMPFlags,WFlags: long;
WFirstGadget: pGadget;
WCheckMark: pImage;
WTitle: string;
WScreen: pScreen;
WBitMap: pBitMap;
WMinWidth,WMinHeight: INTEGER;
WMaxWidth,WMaxHeight,WType_: word;
TitleMode:BOOLEAN):pWindow;
VAR TempWindow : tNewWindow;
TempTitle : ARRAY [1..80] OF byte;
BEGIN
WITH TempWindow DO
BEGIN
LeftEdge :=WLeftEdge;
TopEdge :=WTopEdge;
Width :=WWidth;
Height :=WHeight;
DetailPen :=WDetailPen;
BlockPen :=WBlockPen;
IDCMPFlags :=WIDCMPFlags;
Flags :=WFlags;
FirstGadget :=WFirstGadget;
CheckMark :=WCheckMark;
Screen :=WScreen;
BitMap :=WBitMap;
MinWidth :=WMinwidth;
MinHeight :=WMinHeight;
MaxWidth :=WMaxWidth;
MaxHeight :=WMaxHeight;
Type_ :=WType_;
END;
IF TitleMode THEN
BEGIN
PasToC(WTitle,TempTitle);
TempWindow.Title:=@TempTitle;
END
ELSE
TempWindow.Title:=NIL;
OpenNewWindow := OpenWindow(@TempWindow);
END;
{****************************************************}
{ Main }
{****************************************************}
BEGIN
{ intuition.library öffnen }
IF OpenIntuitionLib(0) THEN
BEGIN
{ Der Name des Message-Ports }
PortName:='AutoRemove Port';
{ Convert Pascal in C-String }
PasToC(PortName,PortCName);
{ Überprüfen, ob der Port schon existiert }
OldPort:=FindPort(@PortCName);
IF (OldPort<>NIL) THEN
BEGIN
Window:=OpenNewWindow(
100,150,300,45,2,3,ACTIVEWINDOW,
SMART_REFRESH OR NOCAREREFRESH,
NIL,NIL,'^ AutoRemove Already Started',
NIL,NIL,10,10,640,256,WBENCHSCREEN,TRUE);
{ Neuen Port einrichten }
NodeName:='AutoRemove Reply';
{ ...und in C-String konvertieren }
PasToC(NodeName,NodeCName);
{ Initialisieren }
ReplyPort.mp_Node.ln_Pri:=0;
ReplyPort.mp_Node.ln_Name:=@NodeCName;
ReplyPort.mp_SigTask:=pTask(FindTask(NIL));
{ Den Port dem Betriebssystem mitteilen }
AddPort(@ReplyPort);
{ Initialisieren einer Botschaft }
MsgSend.mn_length:=SizeOf(tMessage);
MsgSend.mn_Node.ln_Type:=NT_MESSAGE;
MsgSend.mn_ReplyPort:=@ReplyPort;
{ An den schon bekannten Port verschicken }
PutMsg(OldPort,@MsgSend);
{ Auf Bestätigung warten }
MsgReceive:=WaitPort(@ReplyPort);
{ Port entfernen }
RemPort(@ReplyPort);
Delay(2000);
CloseWindow(window);
END
ELSE
BEGIN
Window:=OpenNewWindow(
100,100,300,45,2,3,ACTIVEWINDOW,
SMART_REFRESH OR NOCAREREFRESH,
NIL,NIL,'AutoRemove Started',NIL,NIL,
10,10,640,256,WBENCHSCREEN,TRUE);
IF Window<>NIL THEN
BEGIN
{ Initialisieren des Ports }
NewPort.mp_Node.ln_Pri:=0;
NewPort.mp_Node.ln_Name:=@PortCName;
NewPort.mp_SigTask:=pTask(FindTask(NIL));
AddPort(@NewPort);
{ Auf Nachricht warten }
Dummy:=WaitPort(@NewPort);
{ Nachricht abholen }
MsgReceive:=GetMsg(@NewPort);
{ Nachricht beantworten }
ReplyMsg(MsgReceive);
{ Port entfernen }
RemPort(@NewPort);
{ Kurze Pause }
Delay(2000);
CloseWindow(Window);
END;
END;
CloseLibrary(pLibrary(IntuitionBase));
END;
END.